import { defineConfig } from "vite";
import path, { resolve } from "path"
import vue from "@vitejs/plugin-vue"
import vueJsx from "@vitejs/plugin-vue-jsx"
import { createSvgIconsPlugin } from "vite-plugin-svg-icons"
import svgLoader from "vite-svg-loader"
import UnoCSS from "unocss/vite"
import DefineOptions from "unplugin-vue-define-options/vite"

export default defineConfig(() => {
  return {
    base: "./",
    resolve: {
      alias: {
        /** @ 符号指向 src 目录 */
        "@": resolve(__dirname, "./src")
      }
    },
    server: {
      port: 3333,
      open: false,
      cors: true,
      strictPort: false
    },
    build: {
      // 消除打包大小超过 500kb 警告
      chunkSizeWarningLimit: 2000,
      // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效
      minify: "terser",
      // 在打包代码时移除 console.log、debugger 和 注释
      terserOptions: {
        compress: {
          drop_console: false,
          drop_debugger: true,
          pure_funcs: ["console.log"]
        },
        format: {
          // 删除注释
          comments: false
        }
      },
      // 打包后静态资源目录
      assetsDir: "static"
    },
    // Vite 插件
    plugins: [
      vue(),
      vueJsx(),
      // 将 SVG 静态图转化为 Vue 组件
      svgLoader(),
      // SVG
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), "src/icons/svg")],
        symbolId: "icon-[dir]-[name]"
      }),
      UnoCSS(),
      // DefineOptions 可以更简单的注册组件名称
      DefineOptions()
    ],
    test: {
      include: ["tests/**/*.test.ts"],
      environment: "jsdom"
    }
  }
})
